<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of LoginController
 *
 * @author Julio Arredondo
 */
class LoginController extends CI_Controller {


    public function procesar_email(){
       //TODO:cargar modelo
       $idUsuario = $this->Usuario_model->existe_email($this->input->post("email"));
       if($idUsuario){
            $lista_proyectos = $this->listar_proyectos($idUsuario);
       }

       //TODO: crear response
    }


    public function load_main_view(){
        if($this->is_login()){
            $login = $this->get_login_data();
            $this->load->view("main_inicio");
            $this->load_user_info_view($login['id_usuario']);
            $this->load_work_space_view();
            $this->load_user_menu_view($login['perfil']);
            $this->load->view("main_fin");
        }
    }

    public function load_login_view(){
        $this->load->view("main_inicio");
        $this->load->view("login");
        $this->load->view("main_fin");
    }

    private function set_user_profile($id_usuario, $id_proyecto){

        if($this->is_administrator($id_usuario)){
            $cod = "ADMIN";
        }else{
            //cargar info proyecto
            $this->load->model("Proyecto_Model", "", true);
            $proyecto = $this->Proyecto_Model->get($id_proyecto);
            if(empty($proyecto)){
                throw new Exception("Imposible obtener datos del proyecto logeado");
            }else{
                if($proyecto['dueno'] == $id_usuario){
                    $cod = "DUENO";
                }else if($proyecto['scrum_master'] == $id_usuario){
                    $cod = "SCRUM_MASTER";
                }else{ //TODO: hacer una comprobacion aqui...
                    $cod = "MEMBER";
                }
            }
        }

        return $cod;
        
    }


    private function is_administrator($id_usuario){
        return ($id_usuario == 1)?true:false;
    }
    private function load_user_info_view($id_usuario){
        //recuperar datos usuario logeado
        $this->load->model("Usuario_model", "", true);
        $this->gui_data($this->Usuario_model->get($id_usuario),"usuario");
        $this->load->view("main_user_info", $this->gui_data);
        //cargar vista de datos de usuario
    }

    private function load_work_space_view(){
        $this->load->view("main_work_space");
    }

    private function load_user_menu_view($perfil){
        ///recuperar datos usuario logeado
        $this->load->model("Usuario_model", "", true);
        $this->gui_data($perfil,"perfil");
        $this->load->view("main_menu", $this->gui_data);
    }

    public function login(){
        $email = $this->input->post("email");
        $password = $this->input->post("password");
        try{
            $exito = true;
            $id_usuario = $this->confirmar_password($email, $password);
            $lista_proyectos= $this->averiguar_proyecto($id_usuario);
            $mensaje = $id_usuario;
            if(count($lista_proyectos) == 1){
                $codigo = "ONE";
                $proyecto = current($lista_proyectos);
                $this->registrar_login($id_usuario, $proyecto['id_proyecto']);
            }else{
                $codigo = "MULTI";
                $this->pre_registrar_login($id_usuario, $lista_proyectos);
            }
        }catch(Exception $e){
            $codigo = $e->getCode();
            $exito = false;
            $mensaje = $e->getMessage();
        }
        $this->json_response($exito, $mensaje, $codigo);
    }


    public function index(){
        if(! $this->is_login()){
            $this->load_login_view();
        }else{
            $this->load_main_view();
        }

    }

    public function login_explicito($id_proyecto){
        $id_usuario = $this->session->userdata('id_usuario');
        $this->registrar_login($id_usuario, $id_proyecto);
        $this->json_response("true", "login enviado");
    }

    public function listar_proyectos(){
        $lista_proyectos = $this->session->userdata('lista_proyectos');
        if(!empty($lista_proyectos)){
            $this->gui_data($lista_proyectos, "lista_proyectos");
            $this->load->view("form_multi_pro", $this->gui_data);
        }
    }

    private function registrar_login($id_usuario, $id_proyecto){
        //agregar informacion del loggeo
        $newdata = array();
        $newdata['perfil'] = $this->set_user_profile($id_usuario, $id_proyecto);
        $newdata['id_usuario'] = $id_usuario;
        $newdata['id_proyecto'] = $id_proyecto;
        $newdata['is_login'] = true;
        $this->session->set_userdata($newdata);
        
    }


    public function logout(){
        $this->session->sess_destroy();
        $this->index();
    }

    private function pre_registrar_login($id_usuario, $lista_proyectos){
        $newdata = array();
        $newdata['id_usuario'] = $id_usuario;
        $newdata['lista_proyectos'] = $lista_proyectos;
        $newdata['is_login'] = false;
        $this->session->set_userdata($newdata);
    }

    private function averiguar_proyecto($id_usuario){
        try{
            $this->load->model("Proyecto_Model", "", true);
            $lista = $this->Proyecto_Model->get_by_user($id_usuario, true);
            if(count($lista) == 0 && ! $this->is_administrator($id_usuario)){
                throw new Exception("No esta asociado a ningun proyecto");
            }

            return $lista;
        }catch(Exception $e){
            throw $e;
        }
    }

    private function confirmar_password($email,$password){
        try{
            $this->load->model("Usuario_model", "", true);
            $id = $this->Usuario_model->confirm_password($email, $password);
            return $id;
        }catch(Exception $e){
            throw $e;
        }
    }


}
?>
